package db;

import java.util.List;

import domain.Account;
import domain.Announcement;
import domain.Club;
import domain.ClubAdministrator;
import web.PaginationSupport;

/**
 * 社团管理员资源库接口
 */
public interface ClubAdministratorRepository {

    /**
     * 获取社团管理员的总数
     * @return 社团管理员的数量
     */
    long count();

    /**
     * 获取特定社团中社团管理员的总数
     * @param clubID    社团ID
     * @return  社团中社团管理员的数量
     */
    long countByClubID(int clubID);

    /**
     * 创建一个新的社团管理员
     * @param clubAdministrator 新社团管理员的信息
     * @return 新创建的社团管理员
     */
    ClubAdministrator save(ClubAdministrator clubAdministrator);

    /**
     * 删除社团管理员
     *
     * @param clubAdminID 社团管理员ID
     * @return 是否删除成功
     */
    boolean delete(int clubAdminID);

    /**
     * 根据ID查找社团管理员
     * @param clubAdminID 社团管理员的ID
     * @return 对应ID的社团管理员
     */
    ClubAdministrator findOne(int clubAdminID);

    /**
     * 根据用户名查找社团管理员
     * @param userName 用户名
     * @return 对应用户名的社团管理员
     */
    ClubAdministrator findByUserName(String userName);

    /**
     * 根据社团管理员ID查找管理的社团
     * @param clubAdminID   社团管理员ID
     * @return  管理的社团
     */
    Club findClubByAdminID(int clubAdminID);

    /**
     * 根据用户名查找社团管理员
     * @param userName  用户名
     * @param password  密码
     * @return  对应用户名的社团管理员
     */
    ClubAdministrator findByUserName(String userName,String password);

    /**
     * 查看社团管理员账号信息
     * @param clubAdminID 社团管理员ID
     * @return 社团管理员的账号信息
     */
    ClubAdministrator viewAccountInfo(int clubAdminID);

    /**
     * 更新社团管理员信息
     * @param clubAdministrator 更新后的社团管理员信息
     * @return 是否更新成功
     */
    boolean updateClubAdministrator(ClubAdministrator clubAdministrator);

    /**
     * 查看社团管理员的社团信息
     * @param clubAdminID 社团管理员ID
     * @return 社团管理员的社团信息
     */
    Club viewClubInfo(int clubAdminID);

    /**
     * 更新社团管理员的社团信息
     * @param clubAdminID 社团管理员ID
     * @param club 新的社团信息
     * @return 是否更新成功
     */
    boolean updateClubInfo(int clubAdminID, Club club);

    /**
     * 获取所有社团管理员
     * @return 所有社团管理员的列表
     */
    List<ClubAdministrator> findAll();

    /**
     * 获取社团管理员
     * @param club  社团
     * @return  社团管理员
     */
    List<ClubAdministrator> findAllByClub(Club club);

    /**
     * 分页查找社团管理员
     * @param pageNo 页码
     * @param pageSize 每页的数量
     * @return 社团管理员的公告列表
     */
    PaginationSupport<ClubAdministrator> findPage(int pageNo, int pageSize);
}

